<?php

class Usuario extends CI_Controller {

    const INT_OPC_ANULAR = 3;
    const INT_OPC_ERROR = -1;

    /**
     * Constructor
     * @author Fernando Esteban Valerio
     */
    function __construct() {
        parent::__construct();
        $this->load->model('usuario_model', '', true);
        $this->load->model('persona_model', '', true);
    }

    /**
     * Metodo para anular un usuario.
     * @author Fernando Esteban Valerio
     */
    function anular() {
        $sessionData = $this->session->userdata('logged_in');
        
         // Inicializar la transaccion
        $this->db->trans_begin();
        
        $idUsuario = filter_input(INPUT_GET, 'id');
        $idPersona = filter_input(INPUT_GET, 'idPersona');
        $tipo = filter_input(INPUT_GET, 'tipo');
        if ($idUsuario != '' && $idPersona != '' && $tipo != '') {
            if ($tipo != INT_PROVEEDOR) {
                $data['id_estado'] = INT_ESTADO_INACTIVO;
                $data['usuario_modificacion'] = $sessionData['id'];
                $data['fecha_modificacion'] = date('Y-m-d H:i:s');
                $data['id_usuario'] = $idUsuario;
                $this->usuario_model->updateEstado($data);

                $dataPersona['id_estado'] = INT_ESTADO_INACTIVO;
                $dataPersona['usuario_modificacion'] = $sessionData['id'];
                $dataPersona['fecha_modificacion'] = date('Y-m-d H:i:s');
                $dataPersona['id_persona'] = $idPersona;
                $this->persona_model->updateEstado($dataPersona);
            } else {
                $data['idSolUsuario'] = $idUsuario;
                $objUsuario = $this->usuario_model->getUsuarioSol($data);
                if (count($objUsuario) > 0) {
                    $data['id_estado'] = INT_ESTADO_INACTIVO;
                    $data['usuario_modificacion'] = $sessionData['id'];
                    $data['fecha_modificacion'] = date('Y-m-d H:i:s');
                    $data['id_usuario'] = $objUsuario['id_usuario'];
                    $this->usuario_model->updateEstado($data);
                }
                $dataPersona['id_estado'] = INT_ESTADO_INACTIVO;
                $dataPersona['usuario_modificacion'] = $sessionData['id'];
                $dataPersona['fecha_modificacion'] = date('Y-m-d H:i:s');
                $dataPersona['id_persona'] = $idPersona;
                $this->persona_model->updateEstado($dataPersona);
            }
            
            if ($this->db->trans_status() === FALSE) {
                $this->db->trans_rollback();
            } else {
                $this->db->trans_commit();
            }
            $this->index(self::INT_OPC_ANULAR);
        } else {
            $this->index(self::INT_OPC_ERROR);
        }
    }

    /**
     * Metodo principal de la bandeja de usuarios.
     * @author Fernando Esteban Valerio
     * @param int $resultado Opción para mostrar mensaje
     */
    function index($resultado=0) {
        $this->load->helper(array('form'));
        $data['page_title'] = 'Bandeja de Usuarios';
        $data['lstUsuario'] = array();
        $data['mensaje'] = '';
        $data['class'] = '';
        if ($this->input->post()) {
            $numRuc = $tipoDoc = $numDoc = $txtDato = $opcion = $fecInicio = $fecFin = '';
            $tipoUsuario = filter_input(INPUT_POST, 'tipoUsuario');

            // Todos
            if ($tipoUsuario == '') {
                $opcionRuc = filter_input(INPUT_POST, 'opcionRuc');
                if ($opcionRuc != '') {
                    $numRuc = filter_input(INPUT_POST, 'txtRuc');
                    $opcion = 1;
                }
                $opcionTd = filter_input(INPUT_POST, 'opcionTd');
                if ($opcionTd != '') {
                    $tipoDoc = filter_input(INPUT_POST, 'tipoDoc');
                    if ($tipoDoc != '') {
                        $numDoc = filter_input(INPUT_POST, 'txtNumDoc');
                    }
                    $opcion = 2;
                }
                $opcionNR = filter_input(INPUT_POST, 'opcionNR');
                if ($opcionNR != '') {
                    $txtDato = filter_input(INPUT_POST, 'txtDato');
                    $opcion = 3;
                }
            }

            // Cliente Individual
            if ($tipoUsuario == 1) {
                $opcionTd = filter_input(INPUT_POST, 'opcionTd');
                if ($opcionTd != '') {
                    $tipoDoc = filter_input(INPUT_POST, 'tipoDoc');
                    if ($tipoDoc != '') {
                        $numDoc = filter_input(INPUT_POST, 'txtNumDoc');
                    }
                    $opcion = 2;
                }
                $opcionNR = filter_input(INPUT_POST, 'opcionNR');
                if ($opcionNR != '') {
                    $txtDato = filter_input(INPUT_POST, 'txtDato');
                    $opcion = 3;
                }
            }

            // Cliente Corporativo - Proveeedor
            if ($tipoUsuario == 2 || $tipoUsuario == 3) {
                $opcionRuc = filter_input(INPUT_POST, 'opcionRuc');
                if ($opcionRuc != '') {
                    $numRuc = filter_input(INPUT_POST, 'txtRuc');
                    $opcion = 1;
                }
                $opcionNR = filter_input(INPUT_POST, 'opcionNR');
                if ($opcionNR != '') {
                    $txtDato = filter_input(INPUT_POST, 'txtDato');
                    $opcion = 3;
                }
            }
            $fecInicio = filter_input(INPUT_POST, 'desde');
            if ($fecInicio != '') {
                $arrFecha = explode('/', $fecInicio);
                $fecInicio = $arrFecha[2] . '-' . $arrFecha[1] . '-' . $arrFecha[0];
            }
            $fecFin = filter_input(INPUT_POST, 'hasta');
            if ($fecFin != '') {
                $arrFecha = explode('/', $fecFin);
                $fecFin = $arrFecha[2] . '-' . $arrFecha[1] . '-' . $arrFecha[0];
            }
            $estado = filter_input(INPUT_POST, 'estado');
            $lstUsuario = $this->usuario_model->buscar($tipoUsuario, $numRuc, $tipoDoc, $numDoc, $txtDato, $estado, $fecInicio, $fecFin, $opcion);
            $data['lstUsuario'] = $lstUsuario;
            $data['tipoUsuario'] = $tipoUsuario;
            if (count($lstUsuario) == 0) {
                $data['mensaje'] = 'No se encontraron registros con los filtros de búsqueda ingresados';
                $data['class'] = "alert_warning";
            }
        } else {
            $tipoUsuario = $numRuc = $tipoDoc = $numDoc = $txtDato = $opcion = $estado = $fecInicio = $fecFin = '';
            $lstUsuario = $this->usuario_model->buscar($tipoUsuario, $numRuc, $tipoDoc, $numDoc, $txtDato, $estado, $fecInicio, $fecFin, $opcion);
            $data['lstUsuario'] = $lstUsuario;
            $data['tipoUsuario'] = $tipoUsuario;
            if (count($lstUsuario) == 0) {
                $data['mensaje'] = 'No se encontraron registros con los filtros de búsqueda ingresados';
                $data['class'] = 'alert_warning';
            }
        }
        switch ($resultado) {
            case self::INT_OPC_ANULAR:
                $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                $data['class'] = 'alert_success';
                break;
            case self::INT_OPC_ERROR:
                $data['mensaje'] = 'Ocurrió un error, comunicarse con el Administrador';
                $data['class'] = 'alert_error';
                break;
        }
        $this->load->view('usuario/usuario_view', $data);
    }

}